package mx.ipn.presentacion.nomina;
import mx.ipn.presentacion.nomina.ui.*;
import mx.ipn.presentacion.ConexionConNegocios;
import com.trolltech.qt.gui.QMessageBox;
import com.trolltech.qt.gui.QApplication;
import com.trolltech.qt.gui.QTableWidgetItem;
import com.trolltech.qt.gui.QWidget;
import com.trolltech.qt.gui.QDialog;
import mx.ipn.to.*;

import java.util.*;
import java.sql.*;
import mx.ipn.presentacion.empleado.*;
import mx.ipn.persistencia.*;
public class Comprobante extends QDialog{
    Ui_Comprobantes comp;
    EmpleadoTO emple;
    DescuentoPuestoTO  []descpuesto;
	PercepcionPuestoTO []perpuesto;
	EmpleadoTO[] listEmpleadoTO;
	PuestoSalarioTO[] ps;
	BitacoraA asistencia;
	RenglonTO  renglon;
	Historialdesc hd;
	Historialper hp;
	TablaTO  tabla;
	ComprobantePercepcionDescuentoTO compro;
	ComprobantePercepcionDescuentoTO [] arrcompro;
	QTableWidgetItem newItem = null;
	java.util.Date fechaini;
	java.util.Date fechapago;
	double sueldo;
	int idcomp;
	int dias;
	int faltas;
	int vacaciones;
	int idtabla;
	double totresta=0.0;
    double totsuma=0.0;
    double tisr=0.0;
    double aux=0.0;
    double sala=0.0;
		double infe=0.0;
		double sup=0.0;
		double cf=0.0;
		double cf1=0.0;
		double por=0.0;
		double porsub=0.0;
		double cas=0.0;
		double paso1=0.0;
		double paso2=0.0;
		double paso3=0.0;
	GregorianCalendar f1 = new GregorianCalendar();
	GregorianCalendar f2 = new GregorianCalendar();
	ResultSet res=null;
	ResultSet resreng=null;
	String []datos = new String[3];
	ProcesoNomina n;
	String contenido = "<html>" +
    "<head><style type=\"text/css\">" +
    "<!--" +
    ".Estilo1 {" +
    "	font-family: Arial, Helvetica, sans-serif;" +
    "	color: #000066;" +
    "}" +
    ".Estilo2 {color: #990000}" +
    "-->" +
    "</style></head><body>";
   String rtabla="";
   String rtabla1="";
   String reng2="";
   String reng1 ="";
   String totales="";
    public Comprobante(){
		comp = new Ui_Comprobantes();
		comp.setupUi(this);
		//rep.tableWidget.setRowCount(1);
		//rep.tableWidget.itemClicked.connect(this,"selectFactura()");
		//rep.pushButton.clicked.connect(this, "ver()");
		//rep.pushButton_2.clicked.connect(this, "buscar()");
		//rep.radioButton.clicked.connect(this,"mes()");
		//rep.radioButton_2.clicked.connect(this,"dia()");
		//comp.pushButton.clicked.connect(this, "buscaemp()");
		/*****/
		comp.pushButton.clicked.connect(this, "buscaemp()");
		comp.pushButton_3.clicked.connect(this, "detalle()");
		comp.pushButton_2.clicked.connect(this, "accept()");
		comp.pushButton_6.clicked.connect(this,"imprime()");
		comp.pushButton_4.clicked.connect(this,"buscar()");
		comp.pushButton_5.clicked.connect(this,"calc()");
		asistencia= new BitacoraA();
		renglon = new RenglonTO();
        tabla= new TablaTO();
        hd=new Historialdesc();
	    hp=new Historialper();
	    n = new ProcesoNomina();
		this.show();
    }
    public Comprobante(QDialog parent){
		
    }
    public void detalle(){
    	Desglose des= new Desglose(sala,infe,por,cf,paso1,paso2,paso3,tisr);
    }
    public void imprime(){
		 rtabla="<h1 align=\"center\" class=\"Estilo1\">Factura</h1>" +
		 		"<p align=\"left\"><strong>Nombre:</strong> "+ comp.lineEdit_4.text()+" </p>" +
		 		"<p align=\"left\"><strong>Nss:</strong> "+ comp.lineEdit.text() +" </p>" +
		 		"<p align=\"left\"><strong>Curp:</strong> "+comp.lineEdit_2.text() +" </p>" +
		 		"<p align=\"left\"><strong>sueldo:</strong> "+comp.lineEdit_3.text() +" </p>" +
		 		"<p align=\"left\"><strong>dias:</strong> "+comp.lineEdit_6.text() +" </p>" +
		 		"<p align=\"left\">&nbsp;</p>" +
		 	"<table width=\"731\" height=\"83\" border=\"1\" align=\"center\" bordercolor=\"#999999\">" +
			"  <tr> <th scope=\"col\"><span class=\"Estilo2\">Descuentos</span></th>" +
			"<th scope=\"col\"><span class=\"Estilo2\"></span></th>" +
			"<th scope=\"col\"><span class=\"Estilo2\"></span></th>" +
			"</tr>";
			 rtabla1="<table width=\"731\" height=\"83\" border=\"1\" align=\"center\" bordercolor=\"#999999\">" +
			"  <tr> <th scope=\"col\"><span class=\"Estilo2\">Percepciones</span></th>" +
			"<th scope=\"col\"><span class=\"Estilo2\"></span></th>" +
			"<th scope=\"col\"><span class=\"Estilo2\"></span></th>" +
			"</tr>";
           totales="<tr bordercolor=\"#FFFFFF\">" +
					"<td>&nbsp;</td>" +
					"<td>&nbsp;</td>" +
					"<td>&nbsp;</td>" +
					"<td>&nbsp;</td>" +
					"<td>&nbsp;</td>" +
					"</tr>" +
					"<tr>" +
					"<td>Total</td>" +
					"<td bordercolor=\"#FFFFFF\">&nbsp;</td>" +
					"</tr>" +
					"<tr>" +
					"<td bordercolor=\"#FFFFFF\">&nbsp;</td>" +
					"<td>Total</td>" +
					"<td>"+comp.lineEdit_3.text()+"</td>" +
					"</tr>" +
					"</table>" +
					"<p align=\"left\">&nbsp;</p>" +
					"<p align=\"left\">&nbsp;</p>" +
					"</body>" +
					"</html>";
		contenido = contenido + rtabla;
		contenido = contenido + reng1;
		contenido = contenido + "</table>"+ rtabla1;
		contenido = contenido + reng2;
		contenido = contenido + totales;
		mx.ipn.presentacion.facturacion.View ver = new mx.ipn.presentacion.facturacion.View(contenido);
	}
    public double isr(double sal){
    	double isr=0.0;
    	idtabla=0;
		String query="";
		aux=0.0;
		infe=0.0;
		sup=0.0;
		cf=0.0;
		cf1=0.0;
		por=0.0;
		porsub=0.0;
		cas=0.0;
		paso1=0.0;
		paso2=0.0;
		paso3=0.0;
		try{
		aux=sal;
		query ="select id_tablas from tablas where nombre='impuesto'";
		tabla.setQuery(query);
		res = tabla.getDatos();
		if(res.first())
		idtabla= res.getInt("id_tablas");
		query="select * from renglon where id_tablas="+idtabla;
		renglon.setQuery(query);
		resreng=renglon.getDatos();
		if(resreng!=null){
			while(resreng.next()){
				infe=resreng.getDouble("inicio");
				sup=resreng.getDouble("fin");
				cf=resreng.getDouble("valor_fijo");
				por=resreng.getDouble("porcentaje");
				if(sal>=infe&&sal<=sup){
					aux=((aux-infe)*(por/100))+cf;
				}
			}
		}
		paso1=aux;
		aux=sal;
		/*****paso2*******/
		query ="select id_tablas from tablas where nombre='subsidio'";
		tabla.setQuery(query);
		res = tabla.getDatos();
		if(res.first())
		idtabla= res.getInt("id_tablas");
		query="select * from renglon where id_tablas="+idtabla;
		renglon.setQuery(query);
		resreng=renglon.getDatos();
		if(resreng!=null){
			while(resreng.next()){
				infe=resreng.getDouble("inicio");
				sup=resreng.getDouble("fin");
				cf1=resreng.getDouble("valor_fijo");
				porsub=resreng.getDouble("porcentaje");
				if(sal>=infe&&sal<=sup){
					aux=((((aux-infe)*(por/100))*(porsub/100))+cf1)*0.95;
				}
			}
		}
		paso2=aux;
		aux=sal;
		/*****paso3*******/
		query ="select id_tablas from tablas where nombre='credito'";
		tabla.setQuery(query);
		res = tabla.getDatos();
		if(res.first())
		idtabla= res.getInt("id_tablas");
		query="select * from renglon where id_tablas="+idtabla;
		renglon.setQuery(query);
		resreng=renglon.getDatos();
		if(resreng!=null){
			while(resreng.next()){
				infe=resreng.getDouble("inicio");
				sup=resreng.getDouble("fin");
				cas=resreng.getDouble("valor_fijo");
				if(sal>=infe&&sal<=sup){
					aux=cas;
				}
			}
		}
		paso3=cas;
		isr=paso1-paso2-paso3;
	    }catch(Exception e){return 0.0;}
    	return isr;
    }
    public void calc(){
    	if(emple!=null){
    		
    	ps = (PuestoSalarioTO[])ConexionConNegocios.invocaServicio("selectPuestoS",PuestoSalarioTO[].class);
	    sueldo=sal();
	    comp.lineEdit_5.setText(String.valueOf(sueldo));
	    dias=Integer.parseInt(comp.lineEdit_6.text());
	    //comp.lineEdit_6.setText(String.valueOf(dias()));
	    sueldo=calcula(sueldo);
	    comp.lineEdit_3.setText(String.valueOf(sueldo));
    	}
    }
    public double calcula(double sal){
        sala=0.0;
        double resta;
        double suma;
        totresta=0.0;
        totsuma=0.0;
        tisr=0.0;
        sala=sal;
        sala=sala*(dias / 30.4);
        double falt;
        double vac;
        if(descpuesto!=null){
    	for(int i=0;i<descpuesto.length;i++)
    	{
    		if(descpuesto[i].getPuestoTO().getIdPuesto()==emple.getPuestoTO().getIdPuesto())
    		{
    		   resta=descpuesto[i].getDescuentoTO().getValor(); 
    		   if(descpuesto[i].getDescuentoTO().getTipoPercepcionDescuentoTO().getNombre().compareToIgnoreCase("por_dias")==0){
    		   resta=resta*dias;}
    		   if(descpuesto[i].getDescuentoTO().getTipoPercepcionDescuentoTO().getNombre().compareToIgnoreCase("cuota")==0){
    		   resta=resta;}
    		   if(descpuesto[i].getDescuentoTO().getTipoPercepcionDescuentoTO().getNombre().compareToIgnoreCase("porcentaje_sueldo")==0){
    		   resta=(resta/100)*sala;}
    		   if(descpuesto[i].getDescuentoTO().getNombre().compareToIgnoreCase("faltas")==0){
        		   resta=(resta/100)*faltas;}
    		   totresta=totresta-resta;
    		   reng1= reng1 +"<td>" + descpuesto[i].getDescuentoTO().getNombre()+"</td>" +
	    	    		"<td>" + descpuesto[i].getDescuentoTO().getValor()+"</td>" +
	    	    		"</tr>";
    	    }
    	}
        }
        if(perpuesto!=null){
    	for(int j=0;j<perpuesto.length;j++)
    	{
    		if(perpuesto[j].getPuestoTO().getIdPuesto()==emple.getPuestoTO().getIdPuesto())
    		{
    		   suma=perpuesto[j].getPercepcionTO().getValor(); 
    		   if(perpuesto[j].getPercepcionTO().getTipoPercepcionDescuentoTO().getNombre().compareToIgnoreCase("por_dias")==0){
    		   suma=suma*dias;}
    		   if(perpuesto[j].getPercepcionTO().getTipoPercepcionDescuentoTO().getNombre().compareToIgnoreCase("cuota")==0){
    		   suma=suma;}
    		   if(perpuesto[j].getPercepcionTO().getTipoPercepcionDescuentoTO().getNombre().compareToIgnoreCase("porcentaje_sueldo")==0){
    		   suma=(suma/100)*sala;}
    		   if(perpuesto[j].getPercepcionTO().getNombre().compareToIgnoreCase("vacaciones")==0){
    		   suma=(suma/100)*vacaciones;}
    		   totsuma=totsuma+suma;
    		   reng2 = reng2 +"<td>" + perpuesto[j].getPercepcionTO().getNombre()+"</td>" +
	    	    		"<td>" + perpuesto[j].getPercepcionTO().getValor()+"</td>" +
	    	    		"</tr>";
    	    }
    	}
        }
        tisr=isr(sala);
        System.out.println(tisr);
        sala=sala-totresta-tisr+totsuma;
    	return sala;	
    }
    public double sal(){
    	double sal=0.0;
    	for(int i=0;i<ps.length;i++)
    	{
    		if(ps[i].getIdPuesto()==emple.getPuestoTO().getIdPuesto())
    		{
    		   sal=ps[i].getSalario();
    	    }
    	}
    	return sal;
    }
    public void dias(java.util.Date fechaini,java.util.Date fechapago){
    	try{
    		f1.setTime(fechaini);
    		f2.setTime(fechapago);
    		n.horarioEnRango(FechaHoraTO.getFecha("2009/01/15"), FechaHoraTO
    				.getFecha("2009/01/19"));
    		FabricaDeDAOs fabricaMySQL = FabricaDeDAOs
			.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
    		ArrayList <DatosNominaTO> nomina1= fabricaMySQL.getDatosNominaDAO().selectDatosNomina();
    		DatosNominaTO []nomina= (DatosNominaTO[])nomina1.toArray(new DatosNominaTO[nomina1.size()]);
    		if(nomina!=null){
    			for(int k=0; k< nomina.length;k++){
    			if(nomina[k].getEmpleadoTO().getIdEmpleado()==emple.getIdEmpleado()){
	        dias=nomina[k].getDiasLaborados();
	        faltas=nomina[k].getFaltas();
	        vacaciones=nomina[k].getDiasVacaciones();
	        comp.lineEdit_6.setText(String.valueOf(dias));
	        comp.lineEdit_7.setText(String.valueOf(faltas));
	        comp.lineEdit_8.setText(String.valueOf(vacaciones));}
    		}
    		}
    	}catch(Exception e){
    		System.out.println(e.getMessage());
    	}
    }
    public void buscar(){
    	BuscarComp bc = new BuscarComp();
		if(bc.exec()== QDialog.DialogCode.Accepted.value()){
			compro = bc.compro;
			emple=bc.emp;
			if(compro!=null&&emple!=null){
				comp.lineEdit_4.setText(emple.getPersonaTO().getNombre()+ emple.getPersonaTO().getApellidoPaterno() + emple.getPersonaTO().getApellidoMaterno());
				comp.lineEdit.setText(emple.getNss());
				comp.lineEdit_2.setText(emple.getPersonaTO().getCurp());
				descpuesto = (DescuentoPuestoTO[])ConexionConNegocios.invocaServicio("selectDescuentoPuesto",DescuentoPuestoTO[].class); 
				perpuesto = (PercepcionPuestoTO[])ConexionConNegocios.invocaServicio("selectperpuesto",PercepcionPuestoTO[].class); 
				comp.tableWidget_2.clearContents();
				if(descpuesto!=null){
					comp.tableWidget_2.setRowCount(descpuesto.length);
			       for(int i=0;i<descpuesto.length;i++)
			        	comp.tableWidget_2.insertRow(i);
			       for(int j=0;j<descpuesto.length;j++){
			       	newItem = new QTableWidgetItem(String.valueOf(descpuesto[j].getDescuentoTO().getNombre()));
		    	    comp.tableWidget_2.setItem(j,0,newItem);
		    	    newItem = new QTableWidgetItem(String.valueOf(descpuesto[j].getDescuentoTO().getValor()));
		    	    comp.tableWidget_2.setItem(j,1,newItem);
			       }
			    }
			    comp.tableWidget.clearContents();
				if(perpuesto!=null){
					comp.tableWidget.setRowCount(perpuesto.length);
			       for(int i=0;i<perpuesto.length;i++)
			        	comp.tableWidget.insertRow(i);
			       for(int j=0;j<perpuesto.length;j++){
			       	newItem = new QTableWidgetItem(String.valueOf(perpuesto[j].getPercepcionTO().getNombre()));
		    	    comp.tableWidget.setItem(j,0,newItem);
			       	newItem = new QTableWidgetItem(String.valueOf(perpuesto[j].getPercepcionTO().getValor()));
		    	    comp.tableWidget.setItem(j,1,newItem);
			       }
			    }
			    ps = (PuestoSalarioTO[])ConexionConNegocios.invocaServicio("selectPuestoS",PuestoSalarioTO[].class);
			    sueldo=sal();
			    comp.lineEdit_5.setText(String.valueOf(sueldo));
			    //comp.lineEdit_6.setText(String.valueOf(dias()));
			    sueldo=calcula(sueldo);
			    comp.lineEdit_3.setText(String.valueOf(sueldo));
			}
		}
    }
    public void accept(){
    	int fila=0;
    	listEmpleadoTO = new EmpleadoTO[1];
    	try{
    	if(emple!=null){
    		f1.set(comp.dateEdit.date().year(),(comp.dateEdit.date().month()-1),comp.dateEdit.date().day());
		    fechaini=f1.getTime();
		    f1.set(comp.dateEdit_2.date().year(),(comp.dateEdit_2.date().month()-1),comp.dateEdit_2.date().day());
		    fechapago=f1.getTime();
	    	listEmpleadoTO[0]=emple;
	    	compro= new ComprobantePercepcionDescuentoTO(0,fechaini,fechapago,sueldo,emple.getIdEmpleado()); 
	    	boolean flag=((Boolean)ConexionConNegocios.invocaServicio("insertComprobantePercepcionDescuento",compro,Boolean.class)).booleanValue();
		       if(flag){
		       	/*arrcompro = (ComprobantePercepcionDescuentoTO[])ConexionConNegocios.invocaServicio("selectComprobantePercepcionDescuento",ComprobantePercepcionDescuentoTO[].class);
		       	idcomp=arrcompro[(arrcompro.length)-1].getIdComprobante();
		       	   for(int j=0;j<descpuesto.length;j++){
		       	   	datos[0]="0";
		       	   	datos[1]=String.valueOf(idcomp);
			        datos[2]=String.valueOf(descpuesto[j].getDescuentoTO().getValor());
		    	    comp.tableWidget_2.setItem(j,0,newItem);
		    	    hd.guardar(datos);
			       }
			       for(int i=0;j<perpuesto.length;i++){
		       	   	datos[0]="0";
		       	   	datos[1]=String.valueOf(idcomp);
			        datos[2]=String.valueOf(perpuesto[i].getPercepcionTO().getNombre());
		    	    comp.tableWidget_2.setItem(j,0,newItem);
		    	    hd.guardar(datos);
			       }*/
		           QMessageBox.information(null,"informacion","guardada");
		        }
		}
	}catch(Exception e){}
    }
    public void buscaemp(){
    	BuscarEmp sp = new BuscarEmp();
		if(sp.exec()== QDialog.DialogCode.Accepted.value()){
			emple=sp.emp;
			if(emple!=null){
				comp.lineEdit_4.setText(emple.getPersonaTO().getNombre()+ " "+emple.getPersonaTO().getApellidoPaterno() + " "+ emple.getPersonaTO().getApellidoMaterno());
				comp.lineEdit.setText(emple.getNss());
				comp.lineEdit_2.setText(emple.getPersonaTO().getCurp());
				descpuesto = (DescuentoPuestoTO[])ConexionConNegocios.invocaServicio("selectDescuentoPuesto",DescuentoPuestoTO[].class); 
				perpuesto = (PercepcionPuestoTO[])ConexionConNegocios.invocaServicio("selectperpuesto",PercepcionPuestoTO[].class); 
				comp.tableWidget_2.clearContents();
				if(descpuesto!=null){
					comp.tableWidget_2.setRowCount(descpuesto.length);
			       for(int i=0;i<descpuesto.length;i++)
			        	comp.tableWidget_2.insertRow(i);
			       for(int j=0;j<descpuesto.length;j++){
			       	newItem = new QTableWidgetItem(String.valueOf(descpuesto[j].getDescuentoTO().getNombre()));
		    	    comp.tableWidget_2.setItem(j,0,newItem);

			       	newItem = new QTableWidgetItem(String.valueOf(descpuesto[j].getDescuentoTO().getValor()));
		    	    comp.tableWidget_2.setItem(j,1,newItem);
			       }
			    }
			    comp.tableWidget.clearContents();
				if(perpuesto!=null){
					comp.tableWidget.setRowCount(perpuesto.length);
			       for(int i=0;i<perpuesto.length;i++)
			        	comp.tableWidget.insertRow(i);
			       for(int j=0;j<perpuesto.length;j++){
			       	newItem = new QTableWidgetItem(String.valueOf(perpuesto[j].getPercepcionTO().getNombre()));
		    	    comp.tableWidget.setItem(j,0,newItem);

			       	newItem = new QTableWidgetItem(String.valueOf(perpuesto[j].getPercepcionTO().getValor()));
		    	    comp.tableWidget.setItem(j,1,newItem);
			       }
			    }
				f1.set(comp.dateEdit.date().year(),(comp.dateEdit.date().month()-1),comp.dateEdit.date().day());
			    fechaini=f1.getTime();
			    f1.set(comp.dateEdit_2.date().year(),(comp.dateEdit_2.date().month()-1),comp.dateEdit_2.date().day());
			    fechapago=f1.getTime();
				dias(fechaini,fechapago);
			}
		}
    }
}
